package controllers

import (
	"gitee.com/tangrx/go-admin/app"
	"gitee.com/tangrx/go-admin/models"
	"gitee.com/tangrx/go-admin/utils"
	"gitee.com/tangrx/go-admin/utils/randUtils"
	"github.com/gin-gonic/gin"
	"log"
)

func init() {
	app.Any("/api/sys/user", func(c *gin.Context) {

		var json models.SearchForm
		if err := c.ShouldBindJSON(&json); err != nil {
			c.JSON(200, gin.H{"error": err.Error()})
			return
		}

		c.JSON(200, models.GetUserList4Pager(json))
	})
	app.Any("/api/sys/user/info", func(c *gin.Context) {
		var json map[string]string

		if err := c.ShouldBindJSON(&json); err != nil {
			c.JSON(200, gin.H{"error": err.Error()})
			return
		}
		data := models.GetUserInfo(utils.StrToInt64(json["id"]))
		if data == nil {
			c.JSON(200, gin.H{"status": "100",
				"data": nil,
				"msg":  "数据不存在！",
			})
			return
		}
		log.Println(data)
		c.JSON(200, gin.H{"status": "200",
			"data": data,
		})
	})

	// 保存用户
	app.Any("/api/sys/user/save", func(c *gin.Context) {
		var json models.Sysusers

		if err := c.ShouldBindJSON(&json); err != nil {
			c.JSON(200, gin.H{"error": err.Error()})
			return
		}
		if json.Userid == 0 {
			json.Salt = randUtils.RandLetterNumber(4)
			json.Userpwd = utils.Md5(json.Userpwd + json.Salt)
			result := models.AddUserData(&json)
			if result == 0 {
				c.JSON(200, gin.H{"status": "100",
					"data": nil,
					"msg":  "保持失败！",
				})
				return
			}
			c.JSON(200, gin.H{"status": "200",
				"msg": "保持成功！",
			})
			return
		}

		data := models.UpdateUser(&json)
		if data == 0 {
			c.JSON(200, gin.H{"status": "100",
				"data": nil,
				"msg":  "保持失败！",
			})
			return
		}
		c.JSON(200, gin.H{"status": "200",
			"msg": "保持成功！",
		})
	})

	// 删除用户
	app.Any("/api/sys/user/delete", func(c *gin.Context) {
		var json map[string]int64

		if err := c.ShouldBindJSON(&json); err != nil {
			c.JSON(200, gin.H{"error": err.Error()})
			return
		}
		user := models.GetUserInfo(json["id"])
		if user == nil {
			c.JSON(200, gin.H{"status": "100",
				"data": nil,
				"msg":  "数据不存在！",
			})
			return
		}
		if user.Issup == 1 {
			c.JSON(200, gin.H{"status": "100",
				"data": nil,
				"msg":  "超级管理员账号不允许删除！",
			})
			return
		}
		data := models.DeleteUser(json["id"])
		if data == 0 {
			c.JSON(200, gin.H{"status": "100",
				"data": nil,
				"msg":  "数据不存在！",
			})
			return
		}
		log.Println(data)
		c.JSON(200, gin.H{"status": "200",
			"data": nil,
			"msg":  "删除成功！",
		})
	})

	// 重置密码
	app.Any("/api/sys/user/retpwd", func(c *gin.Context) {

		userId := app.GetUserId(c)
		if userId == 0 {
			c.JSON(200, gin.H{"status": "100",
				"data": nil,
				"msg":  "用户未登录！",
			})
			return
		}
		var json map[string]int64
		if err := c.ShouldBindJSON(&json); err != nil {
			c.JSON(200, gin.H{"error": err.Error()})
			return
		}
		data := models.GetUserInfo(json["id"])
		if data == nil {
			c.JSON(200, gin.H{"status": "100",
				"data": nil,
				"msg":  "数据不存在！",
			})
			return
		}
		newpwd := "123456"
		newPassword := utils.Md5(newpwd + data.Salt)
		result := models.ResetUserPwd(json["id"], newPassword)
		if result == 0 {
			c.JSON(200, gin.H{"status": "100",
				"data": nil,
				"msg":  "数据不存在！",
			})
			return
		}
		log.Println(result)
		c.JSON(200, gin.H{"status": "200",
			"data": newpwd,
			"msg":  "修改密码成功！",
		})
	})

}
